import datetime
from applications.extensions import db
from sqlalchemy import UniqueConstraint






class TestMethodYPModel(db.Model):
    __tablename__ = '检验方法_yp'
    id = db.Column(db.Integer, primary_key=True, comment='ID') #默认自增primary_key
    名称 = db.Column(db.String(255), comment='名称：水分-烘干法|蜂蜜-含量|白芍-薄层鉴别', nullable=False,unique=True)
    检验项目 = db.Column(db.String(255), comment='检验项目：【性状】|【鉴别】|【检查】|【浸出物】|【含量】', nullable=False)
    方法名称 = db.Column(db.String(255), comment='方法名称：水分| |薄层鉴别|芍药苷|挥发油|灰分|禁用农药|果糖与葡萄糖', nullable=False)
    方法依据 = db.Column(db.String(255),
                         comment='检验依据：《中国药典》2020年版四部 通则0832 第四法|补充检验方法bc-xxxx-xx')
    结果类型 = db.Column(db.String(255), comment='类型：文本|数值', nullable=False)
    结果单位 = db.Column(db.String(255), comment='类型：%| |mg/Kg', nullable=True)
    结果要求 = db.Column(db.String(255), comment='类型：不得过| |不少于', nullable=True)
    结果前缀 = db.Column(db.String(255), comment='前缀：含药屑及杂质| |热浸法|用60%乙醇作溶剂，不得少于|本品含果糖和葡萄糖的总量不得少于|果糖与葡萄糖含量比值不得小于', nullable=True)
    结果后缀 = db.Column(db.String(255), comment='前缀：含药屑及杂质| |热浸法|用60%乙醇作溶剂，不得少于', nullable=True)
    method_dh = db.Column(db.String(255), default='方法单号', comment='一个方法有两个结果')
    date_time = db.Column(db.Date, default=datetime.date.today(), comment='日期')
    user_method_id = db.Column(db.Integer, db.ForeignKey("admin_user.id"), comment='起草检验方法人员_编号', nullable=False)
    enable = db.Column(db.Integer, comment='停用|启用')
    remark = db.Column(db.String(255), comment='备注')
    create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
    update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now,
                          comment='更新时间')




    # #创建联合索引
    # __table_args__ = (
    #     UniqueConstraint('名称', '版本号', name='unix_raw_yp_code_version'),
    # )
    def to_dict(self):
        return {column.name: getattr(self, column.name) for column in self.__table__.columns}

class TestStandardRawYPModel(db.Model):
    __tablename__ = '检品标准_yp_原料'
    id = db.Column(db.Integer, primary_key=True, comment='ID') #默认自增primary_key
    standard_dh = db.Column(db.String(255), comment='单据编号:TS-31-1001', nullable=False)
    raw_id = db.Column(db.Integer, db.ForeignKey("商品档案_原料_饮片.id"), comment='原料_编号',
                          nullable=False)  # 属性 外键
    method_id = db.Column(db.Integer, db.ForeignKey("检验方法_yp.id"), comment='方法_编号',
                       nullable=False)  # 属性 外键
    standard_result = db.Column(db.String(255), comment='要求的结果，可以填数字或文本', nullable=False)
    date_time = db.Column(db.Date, default=datetime.date.today(), comment='单据日期')
    user_standard_id = db.Column(db.Integer, db.ForeignKey("admin_user.id"), comment='取样人员_编号', nullable=False)
    remark = db.Column(db.String(255), comment='备注')
    create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
    update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now,
                          comment='更新时间')
    def to_dict(self):
        return {column.name: getattr(self, column.name) for column in self.__table__.columns}
class TestRawYPModel(db.Model):
    __tablename__ = '检验_yp_原料'
    id = db.Column(db.Integer, primary_key=True, comment='ID') #默认自增primary_key

    sample_dh = db.Column(db.String(255), comment='取样单号', nullable=False)
    enable = db.Column(db.Integer, comment='检品状态,  检验中|检验完成（所有检验项目结束）')
    result = db.Column(db.String(255), comment='最终结论 合格| |不合格', nullable=True)
    date_time = db.Column(db.Date, default=datetime.date.today(), comment='单据日期')
    user_test_master_id = db.Column(db.Integer, db.ForeignKey("admin_user.id"), comment='化验室主任_编号', nullable=False)
    remark = db.Column(db.String(255), comment='备注')
    create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
    update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now,
                          comment='更新时间')
    def to_dict(self):
        return {column.name: getattr(self, column.name) for column in self.__table__.columns}
class TestRawYPModel_child(db.Model):
    __tablename__ = '检验_yp_原料_单项'
    id = db.Column(db.Integer, primary_key=True, comment='ID') #默认自增primary_key

    test_id = db.Column(db.Integer, db.ForeignKey("检验_yp_原料.id"), comment='检验_编号',
                            nullable=False)  # 属性 外键

    standard_id = db.Column(db.Integer, db.ForeignKey("检品标准_yp_原料.id"), comment='标准_编号',
                       nullable=False)  # 属性 外键
    test_one_dh = db.Column(db.String(255), comment='单项目检验单号，一个单项目可能有两个检验结果', nullable=False)
    test_result = db.Column(db.String(255), comment='单项目检验结果', nullable=False)
    result = db.Column(db.String(255), comment='最终结论 合格| |不合格', nullable=True)
    enable = db.Column(db.Integer, comment='检品状态,  检验中|检验完成（单项目检验项目结束）')
    date_time = db.Column(db.Date, default=datetime.date.today(), comment='单据日期')
    user_tester_id = db.Column(db.Integer, db.ForeignKey("admin_user.id"), comment='检验人员_编号', nullable=False)
    user_reviewer_id = db.Column(db.Integer, db.ForeignKey("admin_user.id"), comment='复核人员_编号', nullable=True)
    review_date_time = db.Column(db.Date, default=datetime.date.today(), comment='复核日期')
    remark = db.Column(db.String(255), comment='备注')
    create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
    update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now,
                          comment='更新时间')
    def to_dict(self):
        return {column.name: getattr(self, column.name) for column in self.__table__.columns}